package com.zhupf.stack;

import java.util.Deque;
import java.util.LinkedList;

/**
 * @author zhupf
 * @date 2024年02月20日 16:53
 * @Description
 *
 * 739. 每日温度
 *
 * 给定一个整数数组 temperatures ，表示每天的温度，返回一个数组 answer ，其中 answer[i] 是指对于第 i 天，下一个更高温度出现在几天后。
 * 如果气温在这之后都不会升高，请在该位置用 0 来代替。
 */
public class DailyTemperatures {

    public static void main(String[] args) {
        int[]  temperatures = {89,62,70,58,47,47,46,76,100,70};
        dailyTemperatures(temperatures);
    }

    public static int[] dailyTemperatures(int[] temperatures) {
        Deque<Integer> idxStack = new LinkedList<>();
        int[] ans = new int[temperatures.length];
        for (int i = temperatures.length - 1; i >= 0; i--) {
            if(idxStack.isEmpty()){
                ans[i] = 0;
            }else{
                if(temperatures[idxStack.peek()] > temperatures[i]){
                    ans[i] = idxStack.peek()-i;
                }{
                    while (!idxStack.isEmpty() && temperatures[idxStack.peek()] <= temperatures[i]){
                        idxStack.pop();
                    }
                    ans[i] = idxStack.isEmpty()?0:idxStack.peek() - i;
                }
            }
            idxStack.push(i);
        }
        return ans;
    }
}
